这次主要说说JavaScript的类型判断函数typeof和判断构造函数原型instanceof的用法和注意的地方。
typeof
我们先看看各个数据类型对应typeof的值
| 数据类型 | Type |
| ——– | —–: |
| Undefined | undefined |
| Null | object (注意这里) |
| Boolean | boolean |
| Number | number |
| String | string |
| Symbol | symbol |
| Function | function |
| other Object | object |
需要注意Type都是小写字母
下面来看看具体的例子:
我们会发现一个问题,就是typeof来判断数据类型其实并不准确。比如数组、正则、日期、对象的typeof返回值都是object,这就会造成一些误差。
所以在typeof判断类型的基础上,我们还需要利用Object.prototype.toString方法来进一步判断数据类型。
我们来看看在相同数据类型的情况下,toString方法和typeof方法返回值的区别:
| 数据类型 | toString | typeof |
| ——– | —–: | :—-: |
| Date | Date | object |
| Array | Array | object |
| Function | Function | object |
| RegExp | RegExp | object |
下面来看看Object.prototype.toString实例
instanceof
instanceof运算符可以用来判断某个构造函数的prototype属性是否存在于另外一个要检测对象的原型链上.
| 数据类型 | instanceof |
| ——– | —–: |
| Date | Date |
| Array | Array |
| Function | Function |
| RegExp | RegExp |
需要注意你上面都是首字母大写
|
|
继承中判断实例是否属于它的父类
复杂用法
A instanceof B :检测B.prototype是否存在于参数A的原型链上.
对于上面的instanceof我们可以写个函数来模拟一下